//
// Created by Tiany on 2021/6/24.
//二叉树的链表实现

#ifndef SHUJUJIEGOU_LINKBINTREE_H
#define SHUJUJIEGOU_LINKBINTREE_H

//数据结构
struct DataType {
    char c;
};

//二叉树结点类型
struct BinTreeNode;
typedef struct BinTreeNode *PBinTreeNode;
struct BinTreeNode {
    struct DataType info;/*数据域*/
    PBinTreeNode leftlink;/*左子结点*/
    PBinTreeNode rightlink;/*右子结点*/
};
typedef struct BinTreeNode *BinTree;/*将二叉树定义为指向结点的指针*/
typedef BinTree *PBinTree;/*指向树根的指针*/

//创建一颗空的二叉树
BinTree createEmptyBinTree(void);

//创建二叉树：递归创建
PBinTreeNode creatBinTree(void);

//返回一颗二叉树，根节点为root，左、右子树为left和right
BinTree consBinTree(BinTree root, BinTree left, BinTree right);

//判断二叉树是否为空
int isNull(BinTree tree);

//返回二叉树的根结点，若二叉树为空，则返回特殊值
struct BinTreeNode root(BinTree tree);

//返回p结点的父节点，结点为空时返回特殊值
struct BinTreeNode parent(BinTree tree, struct BinTreeNode p);

//返回p结点的左子树
struct BinTreeNode leftChild(BinTree tree, struct BinTreeNode p);

//返回p结点的右子树
struct BinTreeNode rightChild(BinTree tree, struct BinTreeNode p);

//
//


#endif //SHUJUJIEGOU_LINKBINTREE_H
